import pandas as pd

df = pd.read_excel('https://www.gairuo.com/file/data/dataset/team.xlsx')
col_list = df.columns.values.tolist()

# sample 随机查看几条
print(df.head(2)),
df.tail(2),
df.sample(2)

print(df.shape[1])  # 查看行数 和列数
df.info()  # df.info()显示有数据类型、索引情况、行列数和各字段数据类型、内存占用等
df.describe()  # df.describe()会计算出各数字字段的总数（count）、平均数（mean）、标准差（std）、最小值（min）、四分位数和最大值（max）
# df.dtypes()
# df.axes()

# 设置name列为索引列
df.set_index('name', inplace=True)
print(df.head(10))

# 选择列
print(df[df['Q1'] > 93])
print(df[['Q1', 'Q2', 'team']])

# dd.loc[x, y]是一个非常强大的数据选择函数，其中X代表行，y代表列，
# 行和列都支持条件表达式，也支持类似列表的切片（如果要用自然索引，需要用df.iloc[]）
print(df.loc[:, ['team', 'Q1']])

# 选择行
print(df[df.index == 'Liver'])
print(df[0:10:2])  # 前十个，隔两行取一行
print(df.iloc[:5, :])  # 取前十行，所有列

# 选择行和列
print(df.loc['Ben', 'Q1':'Q4'])
print(df.loc['Ack':'Acob', "Q1": "Q4"])

# Q1列大于90
print(df[df['Q1'] > 90])
print(df[df.Q1 > 90])
# team列为c
print(df[df.team == 'C'])
# 指定索引行
print(df[df.index == 'Ack'])
# 组合条件筛选
df[(df['Q1'] > 90) & (df['team'] == 'C')]
df[df['team'] == 'C'].loc[df.Q1 > 90]


#排序
df.sort_values(by = 'Q1') # 默认升序
df.sort_values(by = 'Q1' , ascending=False)   #设置为降序
df.sort_values(by = ['team' , 'Q1'] , ascending = [True , False])  #team

#分组聚合
df.groupby('team').sum()  #按团队分组对应列相加
df.groupby('team').mean()  #按团队分组对应列求平均
print(df.groupby('team').agg({'Q1' : 'sum' , 'Q2' : 'count','Q3' : 'mean' , 'Q4' : 'max'}))


#数据转换
df.groupby('team').sum()
df.groupby('team').sum().T
print(df.groupby('team').sum().stack())  # 对数据表按照列展开
print(df.groupby('team').sum().unstack())  # 对数据表按照行展开

#增加列
df['one'] = 1
df['sum'] = df['Q1'] + df['Q2']
df['tatil'] = df.loc[: , 'Q1' : 'Q4'].apply(lambda x : sum(x) , axis = 1 )  #计算出的值赋给新列
df['vag'] = df.tatil/4


#统计分析
# df.mean() #返回所有列 的均值
# df.corr() #返回列于列的相关系数
# df.count() #返回每一列的非空值的个数
# df.max() #反馈每一列的最大值
# df.min() #反馈每一列的最小值
# df.median()  #反馈每一列的中位数
# df.std() #反馈每一列的标准差
# df.var() #方差
# df.mode() #众数

#绘图
df['Q1'].plot()
df.loc['Ack' , 'Q1':'Q4'].plot()

#导出表
# df.to_excel('team.xlsx')
# df.to_csv('team.csv')